package com.etime.shycourse.services.wxcourselist;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.etime.shycourse.controller.wx.courselist.CourseSelectParam;
import com.etime.shycourse.dao.CourseMapper;
import com.etime.shycourse.dao.CoursetypeMapper;
import com.etime.shycourse.dao.OrganizationMapper;
import com.etime.shycourse.dto.WXCourseTypeListDto;
import com.etime.shycourse.dto.WXOffLineCourseShowDto;
import com.etime.shycourse.pojo.Course;
import com.etime.shycourse.pojo.Coursetype;
import com.etime.shycourse.pojo.Organization;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 微信小程序端课程列表服务层实现类
 */
@Service
public class WXCourseListServiceImpl implements WXCourseListService {

    @Autowired
    private CoursetypeMapper coursetypeMapper;

    @Autowired
    private CourseMapper courseMapper;
    @Autowired
    private OrganizationMapper organizationMapper;
    /**
     * 微信小程序端课程列表页面获取课程分类的数据接口
     *
     * @return
     */
    @Override
    public List<WXCourseTypeListDto> selectCourseTypeList() {
        //1、查询所有可用的课程类型列表
        QueryWrapper<Coursetype> wrapper = new QueryWrapper<>();
        wrapper.eq("coursetypestate",1);
        List<Coursetype> typelist = coursetypeMapper.selectList(wrapper);
        //2、组织课程列表类型类别。处理成前端所需要的数据结构
        List<WXCourseTypeListDto> list = new ArrayList<>();
        //处理线下培训分类(固定一个线下课程分类)
        WXCourseTypeListDto unlinetype = new WXCourseTypeListDto();
        unlinetype.setCoursetypeid(-10);
        unlinetype.setCoursetypename("线下培训");
        List<Coursetype> unchild = new ArrayList<>();
        for(Coursetype untype: typelist){
            if(untype.getCoursetypename().equals("线下培训")){
                for(Coursetype ptype: typelist){
                    if(ptype.getCoursetypeid().equals(untype.getCourseptypeid())){
                        Coursetype p = new Coursetype();
                        p.setCoursetypeid(untype.getCoursetypeid());
                        p.setCoursetypename(ptype.getCoursetypename());
                        unchild.add(p);
                        break;
                    }
                }
            }
        }
        unlinetype.setClildren(unchild);
        list.add(unlinetype);
        //处理其他课程分类
        for(Coursetype type : typelist){
            if(type.getCourseptypeid()==-1){
                //第一层，pid=-1
                WXCourseTypeListDto dto = new WXCourseTypeListDto();
                dto.setCoursetypeid(type.getCoursetypeid());
                dto.setCourseptypeid(type.getCourseptypeid());
                dto.setCoursetypename(type.getCoursetypename());
                dto.setCoursetypestate(type.getCoursetypestate());
                //第二层
                List<Coursetype> listchild = new ArrayList<>();
                for(Coursetype child : typelist){
                    if(child.getCourseptypeid().equals(type.getCoursetypeid())){
                        if(child.getCoursetypename().equals("线下培训")){
                            //线下培训放在第一个
                            listchild.add(0,child);
                        }else {
                            listchild.add(child);
                        }
                    }
                }
                //将支招放在最后面
                for(int i=0;i<listchild.size();i++){
                    if(listchild.get(i).getCoursetypeid()==-2){
                        Coursetype c = listchild.get(i);
                        listchild.remove(i);
                        listchild.add(c);
                    }
                }
                dto.setClildren(listchild);
                list.add(dto);
            }
        }
        return list;
    }

    /**
     * 分页查询课程列表
     *
     * @param param
     * @param pagenum
     * @param pagesize
     * @return
     */
    @Override
    public Page<Course> selectCourseListByPage(CourseSelectParam param, Long pagenum, Long pagesize) {
        Page<Course> page = new Page<>(pagenum,pagesize);
        if(param.getKeyword()!=null && !param.getKeyword().equals("")){
            param.setKeyword("%"+param.getKeyword()+"%");
        }else{
            param.setKeyword(null);
        }
        if(param.getCourseaudiences()!=null && !param.getCourseaudiences().equals("")){
            param.setCourseaudiences("%"+param.getCourseaudiences()+"%");
        }else{
            param.setCourseaudiences(null);
        }
        return courseMapper.selectCourseByPageWX(param,page);
    }

    /**
     * 分页查询线下课程列表
     *
     * @param param
     * @param pagenum
     * @param pagesize
     * @return
     */
    @Override
    public Page<WXOffLineCourseShowDto> selectOffLineCourseListByPage(CourseSelectParam param, Long pagenum, Long pagesize) {
        Page<Course> page = new Page<>(pagenum,pagesize);
        if(param.getKeyword()!=null && !param.getKeyword().equals("")){
            param.setKeyword("%"+param.getKeyword()+"%");
        }else{
            param.setKeyword(null);
        }
        if(param.getCourseaudiences()!=null && !param.getCourseaudiences().equals("")){
            param.setCourseaudiences("%"+param.getCourseaudiences()+"%");
        }else{
            param.setCourseaudiences(null);
        }
        return courseMapper.selectOffLineCourseByPageWX(param,page);
    }

    /**
     * 查询所有可用的机构
     *
     * @return
     */
    @Override
    public List<Organization> selectOrgListByUsed() {
        QueryWrapper<Organization> wrapper = new QueryWrapper<>();
        wrapper.eq("orgauditstate",1);
        return organizationMapper.selectList(wrapper);
    }

    /**
     * 查询支招课程列表
     *
     * @return
     */
    @Override
    public List<Course> selectZhiZhaoCourseList() {
        QueryWrapper<Course> wrapper = new QueryWrapper<>();
        wrapper.eq("coursestate",1);
        wrapper.eq("courseaudit",1);
        wrapper.eq("coursetype",3);
        return courseMapper.selectList(wrapper);
    }
}
